package com.leetcode.leetcode.anyan;

public class _面试题01_02判定是否互为字符重排 {
    /**
     * 给定两个字符串 s1 和 s2，请编写一个程序，确定其中一个字符串的字符重新排列后，能否变成另一个字符串。
     *
     * 示例 1：
     *
     * 输入: s1 = "abc", s2 = "bca"
     * 输出: true
     * 示例 2：
     *
     * 输入: s1 = "abc", s2 = "bad"
     * 输出: false
     * 说明：
     *
     * 0 <= len(s1) <= 100
     * 0 <= len(s2) <= 100
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode-cn.com/problems/check-permutation-lcci
     * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
     */

    class Solution {
        public boolean CheckPermutation(String s1, String s2) {
            if (s1.length() != s2.length()) return false;
            //定义长度为26的char数组，用来存储字符串中会出现的字母个数
            char[] array = new char[26];
            for (int i = 0; i < s1.length(); i++){
                char c = s1.charAt(i);
                array[c - 'a'] += 1;//s1中出现的字母，数组对应位置的值+1
            }
            for (int i = 0; i < s2.length(); i++){
                char c = s2.charAt(i);
                array[c - 'a'] -= 1;//s2中出现的字母，数组对应位置的值-1
            }
            for (int i = 0; i < array.length; i++){
                /**
                 * 两个字符串经过一加一减之后，如果是互为字符重排，
                 * 那么数组array的所有元素值应该是初始化时候的0，
                 * 否则两个字符串不是互为字符重排
                 */
                if (array[i] > 0) {
                    return false;
                }
            }
            return true;
        }
    }

}
